home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / VBASIC / PBCWIN21.ZIP / PBCWIN.TXT < prev   
Encoding:
Text File  |  1996-02-01  |  33.0 KB  |  1,120 lines

  1.                   The PBClone Windows Library
  2.                   ---------------------------
  3.                           Version 2.1
  4.  
  5.  PBCwin  (C) Copyright 1996 Charon Software, All Rights Reserved
  6.  
  7.  
  8. This is PBCwin, a collection of tools in DLL format for Windows
  9. programming. It is written primarily with Visual Basic in mind,
  10. although much of it will work with any language that supports
  11. DLL libraries. The PBCwin collection is copyrighted and may be
  12. distributed only according to the following conditions:
  13.  
  14.    All PBCwin files must be distributed together as a unit.
  15.    No files may be added or removed from PBCwin.
  16.    No PBCwin file may be altered in any way.
  17.  
  18. YOU USE THIS LIBRARY AT YOUR OWN RISK. I have tested it on my
  19. own computer, but I will not assume responsibility for any
  20. problems which PBCwin may cause you.
  21.  
  22. It is expected that if you find PBCwin useful, you will register
  23. your copy. You may not use PBCwin routines in programs intended
  24. for distribution unless you have registered. See the ORDER.TXT
  25. file for more details.
  26.  
  27. The PBCwin tools can be used with any language that supports DLL
  28. libraries. PBCwin is documented only for use with Visual Basic,
  29. however.
  30.  
  31. In order to use the PBCWIN.DLL routines in a Visual Basic
  32. program, you must place the appropriate routine declarations in
  33. the globals section of the program. These declarations can be
  34. taken individually or en masse from the PBCWIN.BI text file. It
  35. is more efficient to use only the declarations you actually
  36. need, but that is up to you. You can use the PBCwinVer function
  37. to make sure that the installed version of PBCWIN.DLL is
  38. sufficiently current as to support the PBCwin routines required
  39. by your program.
  40.  
  41. The PBCwin DLL routines are currently documented in the
  42. PBCWIN.TXT text file and in the PBCWIN.HLP online help. In order
  43. to use the online help, place PBCWIN.HLP in your VB directory.
  44. When you use VB, you can access the PBCwin help by selecting
  45. Help, then using the Help "File Open" option to open PBCWIN.HLP
  46. as the current help document.
  47.  
  48. Name  : BinI                 (Binary Integer)
  49.  
  50. This function converts a binary value, passed to it as a
  51. string, to an integer.  It stops the conversion on reaching the
  52. end of the string or at the first character that is not a valid
  53. binary digit ("0" or "1").
  54.  
  55. See also BinL, which returns a long integer value.
  56.  
  57.    Result% = BinI(St$)
  58.  
  59. St$       binary number, in string form
  60. -------
  61. Result%   integer equivalent of binary number
  62.  
  63.  
  64.  
  65. Name  : BinL                 (Binary Long)
  66.  
  67. This function converts a binary value, passed to it as a
  68. string, to a long integer.  It stops the conversion on reaching
  69. the end of the string or at the first character that is not a
  70. valid binary digit ("0" or "1").
  71.  
  72. See also BinI, which returns an integer value.
  73.  
  74.    Result& = BinL(St$)
  75.  
  76. St$       binary number, in string form
  77. -------
  78. Result&   long integer equivalent of binary number
  79.  
  80. Name  : Bytes2Int            (Bytes to Integer)
  81.  
  82. This function combines two bytes, contained in separate
  83. integers, into a single integer value.
  84.  
  85. See also HiByte and LoByte, which may be used to reverse the
  86. process, splitting an integer into two bytes.
  87.  
  88.    Result% = Bytes2Int(Lo%, Hi%)
  89.  
  90. Lo%       low, or least significant, byte
  91. Hi%       high, or most significant, byte
  92. -------
  93. Result%   result of combining bytes into an integer
  94.  
  95. Name  : Checksum             (Checksum)
  96.  
  97. This function calculates an 8-bit checksum for a string.  The
  98. result is compatible with Xmodem and Ymodem file transfer
  99. protocols, and can be used as a fast and simple check of data
  100. validity.  For more rigorous testing, see CRC16.
  101.  
  102.    Result% = Checksum(St$, Bytes%)
  103.  
  104. St$       string for which to calculate checksum
  105. Bytes%    number of characters for which to calculate checksum
  106. -------
  107. Result%   checksum of specified part of string
  108.  
  109. Name  : ComPorts             (Comm Ports)
  110.  
  111. This function returns the number of communications (serial)
  112. ports installed.
  113.  
  114.    Result% = ComPorts()
  115.  
  116. -------
  117. Result%   comm ports (0-3)
  118.  
  119. Name  : CRC16                (CRC, 16-bit)
  120.  
  121. This function calculates a 16-bit "cyclical redundancy check"
  122. checksum, or CRC, for a string.  The result is compatible with
  123. Xmodem and Ymodem file transfer protocols, and can be used as a
  124. check of data validity.
  125.  
  126. Note that the Xmodem and Ymodem file transfer protocols use a
  127. different byte ordering method than typical of Intel machines.
  128. If you intend to use this function in writing file transfer
  129. protocols, you will need to reverse the byte order to MSB
  130. first, LSB second.  This can be accomplished with either
  131. LRotateI or RRotateI with a shift count of 8 (eight), or by
  132. splitting the integer into bytes with LoByte and HiByte, and
  133. swapping the results.
  134.  
  135.    Result% = CRC16(St$, Bytes%)
  136.  
  137. St$       string for which to calculate CRC
  138. Bytes%    number of characters for which to calculate CRC
  139. -------
  140. Result%   CRC of specified part of string
  141.  
  142. Name  : DateSq               (Date Squeeze)
  143.  
  144. This function compresses a date into a single integer.  This
  145. provides a very efficient storage format for dates ranging from
  146. January 1, 1900 to December 31, 2028.
  147.  
  148. Uncompression is done with DayUnsq, MonthUnsq, and YearUnsq.
  149. See also TimeSq, which allows you to compress a time value
  150. similarly.
  151.  
  152. Note that compressed dates are not in a format that may be
  153. readily used for comparison or date math purposes.  If you need
  154. such capabilities, convert the date to a BASIC time/date serial
  155. number first-- see your BASIC manual for details.
  156.  
  157. If you pass a year of 0-99, it will be translated to 1900-1999
  158. before the compression is done.  Depending on your application,
  159. you may wish to assume 0-28 is the same as 2000-2028 instead.
  160. If so, make sure you do an explicit conversion before this
  161. function is called.
  162.  
  163.    Result% = DateSq(MonthNr%, DayNr%, YearNr%)
  164.  
  165. MonthNr%    month number (1-12)
  166. DayNr%      day number (1-31)
  167. YearNr%     year number (1900-2028)
  168. -------
  169. Result%     compressed date
  170.  
  171. Name  : DayUnsq              (Day Unsqueeze)
  172.  
  173. This function returns the day from a compressed date.  It works
  174. in conjunction with the DateSq date compression function.
  175.  
  176.    DayNr% = DayUnsq(Number%)
  177.  
  178. Number%     compressed date
  179. -------
  180. DayNr%      day number
  181.  
  182. Name  : Floppies             (Floppies)
  183.  
  184. This function returns the number of floppy disk drives
  185. installed, up to two.  Although it is possible to have up to
  186. four floppy drives, the PC was designed to expect a maximum of
  187. two, and this routine can't tell if there are more than that.
  188.  
  189.    Result% = Floppies()
  190.  
  191. -------
  192. Result%   floppy drives (0-2)
  193.  
  194. Name  : GetComAddr           (Get Comm Address)
  195.  
  196. This function returns the I/O base port address for a specified
  197. communications (serial) port.  If there is no such serial port,
  198. or if the port is in use, a zero will be returned.
  199.  
  200.    Address% = GetComAddr(PortNr%)
  201.  
  202. PortNr%     communications port number (0-3)
  203. -------
  204. Address%    I/O base port address for comm port
  205.  
  206. Name  : GetPrtAddr           (Get Prt Address)
  207.  
  208. This function returns the I/O base port address for a specified
  209. printer (parallel) port.  If there is no such parallel port, a
  210. zero will be returned.
  211.  
  212.    Address% = GetPrtAddr(PortNr%)
  213.  
  214. PortNr%     printer port number (0-3)
  215. -------
  216. Address%    I/O base port address for printer port
  217.  
  218. Name  : GetTick              (Get clock Tick)
  219.  
  220. This function returns the current system time count.  The count
  221. is the amount of time after midnight, in (approximately) 1/18th
  222. seconds.  This can be used as a fairly high-resolution timer.
  223.  
  224. DO NOT use this function to write a delay routine!  That would
  225. eat precious system time that could be more profitably used by
  226. other programs while your program is idle-- remember, Windows
  227. is a multitasking environment.  If you need a delay, use the
  228. SLEEP statement provided by BASIC.
  229.  
  230.    Result& = GetTick()
  231.  
  232. -------
  233. Result&   system timer tick
  234.  
  235. Name  : HiByte               (High Byte)
  236.  
  237. This function returns the high, or most significant, byte of an
  238. integer.
  239.  
  240. See also Bytes2Int, which can be used to reverse the process.
  241.  
  242.    Byte% = HiByte(Number%)
  243.  
  244. Number%     number from which to pick high byte
  245. -------
  246. Byte%       high byte of number
  247.  
  248. Name  : HiNybble             (High Nybble)
  249.  
  250. This function returns the high, or most significant, nybble of
  251. a byte.
  252.  
  253. See also Nybs2Byte, which can be used to reverse the process.
  254.  
  255.    Nybble% = HiNybble(Number%)
  256.  
  257. Number%     byte from which to pick high nybble
  258. -------
  259. Nybble%     high nybble of byte
  260.  
  261. Name  : HiWord               (High Word)
  262.  
  263. This function returns the high, or most significant, word of a
  264. long integer.
  265.  
  266. See also Ints2Long, which can be used to reverse the process.
  267.  
  268.    Word% = HiWord(Number&)
  269.  
  270. Number&     long integer from which to pick high word
  271. -------
  272. Word%       high word of long integer
  273.  
  274. Name  : HourUnsq             (Hour Unsqueeze)
  275.  
  276. This function returns the hour from a compressed time.  It
  277. works in conjunction with the TimeSq time compression function.
  278.  
  279.    HourNr% = HourUnsq(Number%)
  280.  
  281. Number%     compressed time
  282. -------
  283. HourNr%     hour number
  284.  
  285. Name  : Ints2Long            (Integers to Long)
  286.  
  287. This function combines two integers into a single long integer
  288. value.
  289.  
  290. See also HiWord and LoWord, which may be used to reverse the
  291. process, splitting a long integer into two integers.
  292.  
  293.    Result& = Ints2Long(Lo%, Hi%)
  294.  
  295. Lo%       low, or least significant, word
  296. Hi%       high, or most significant, word
  297. -------
  298. Result&   result of combining integers into a long
  299.  
  300. Name  : IsAlNum              (Is AlphaNumeric)
  301.  
  302. This function tells you whether a character is alphanumeric,
  303. that is, either a letter of the alphabet or a digit.  It
  304. operates on the first character of a string you pass it.
  305.  
  306.    Result% = IsAlNum(St$)
  307.  
  308. St$        character to test
  309. -------
  310. Result%    whether char is alphanumeric (-1 yes, 0 no)
  311.  
  312. Name  : IsAlpha              (Is Alphabetic)
  313.  
  314. This function tells you whether a character is alphabetic.  It
  315. operates on the first character of a string you pass it.
  316.  
  317.    Result% = IsAlpha(St$)
  318.  
  319. St$        character to test
  320. -------
  321. Result%    whether char is alphabetic (-1 yes, 0 no)
  322.  
  323. Name  : IsASCII              (Is ASCII)
  324.  
  325. This function tells you whether a character is a member of the
  326. ASCII character set.  It operates on the first character of a
  327. string you pass it.
  328.  
  329.    Result% = IsASCII(St$)
  330.  
  331. St$        character to test
  332. -------
  333. Result%    whether char is ASCII (-1 yes, 0 no)
  334.  
  335. Name  : IsControl            (Is Control)
  336.  
  337. This function tells you whether a character is a control code.
  338. Control codes are considered to be ASCII 0-31 and 127.  This
  339. function operates on the first character of a string you pass
  340. it.
  341.  
  342.    Result% = IsControl(St$)
  343.  
  344. St$        character to test
  345. -------
  346. Result%    whether char is a control code (-1 yes, 0 no)
  347.  
  348. Name  : IsDigit              (Is Digit)
  349.  
  350. This function tells you whether a character is a digit. It
  351. operates on the first character of a string you pass it.
  352.  
  353.    Result% = IsDigit(St$)
  354.  
  355. St$        character to test
  356. -------
  357. Result%    whether char is a digit (-1 yes, 0 no)
  358.  
  359. Name  : IsLower              (Is Lowercase)
  360.  
  361. This function tells you whether a character is a lowercase
  362. letter ("a" through "z").  It operates on the first character
  363. of a string you pass it.
  364.  
  365.    Result% = IsLower(St$)
  366.  
  367. St$        character to test
  368. -------
  369. Result%    whether char is lowercase (-1 yes, 0 no)
  370.  
  371. Name  : IsPunct              (Is Punctuation)
  372.  
  373. This function tells you whether a character may be construed as
  374. punctuation.  This includes the space and most symbols. This
  375. function operates on the first character of a string you pass
  376. it.
  377.  
  378.    Result% = IsPunct(St$)
  379.  
  380. St$        character to test
  381. -------
  382. Result%    whether char is punctuation (-1 yes, 0 no)
  383.  
  384. Name  : IsSpace              (Is Space)
  385.  
  386. This function tells you whether a character is "white space"
  387. (ASCII 9-13 and 32, including tab, linefeed, formfeed, carriage
  388. return, and space).  It operates on the first character of a
  389. string you pass it.
  390.  
  391.    Result% = IsSpace(St$)
  392.  
  393. St$        character to test
  394. -------
  395. Result%    whether char is white space (-1 yes, 0 no)
  396.  
  397. Name  : IsUpper              (Is Uppercase)
  398.  
  399. This function tells you whether a character is an uppercase
  400. letter ("A" through "Z").  It operates on the first character
  401. of a string you pass it.
  402.  
  403.    Result% = IsUpper(St$)
  404.  
  405. St$        character to test
  406. -------
  407. Result%    whether char is uppercase (-1 yes, 0 no)
  408.  
  409. Name  : IsXDigit             (Is heX Digit)
  410.  
  411. This function tells you whether a character is a hexadecimal
  412. digit.  This includes 0-9, a-z, and A-Z.  This function
  413. operates on the first character of a string you pass it.
  414.  
  415.    Result% = IsXDigit(St$)
  416.  
  417. St$        character to test
  418. -------
  419. Result%    whether char is a hex digit (-1 yes, 0 no)
  420.  
  421. Name  : LoByte               (Low Byte)
  422.  
  423. This function returns the low, or least significant, byte of an
  424. integer.
  425.  
  426. See also Bytes2Int, which can be used to reverse the process.
  427.  
  428.    Byte% = LoByte(Number%)
  429.  
  430. Number%     number from which to pick low byte
  431. -------
  432. Byte%       low byte of number
  433.  
  434. Name  : LoNybble             (Low Nybble)
  435.  
  436. This function returns the low, or least significant, nybble of
  437. a byte.
  438.  
  439. See also Nybs2Byte, which can be used to reverse the process.
  440.  
  441.    Nybble% = LoNybble(Number%)
  442.  
  443. Number%     byte from which to pick low nybble
  444. -------
  445. Nybble%     low nybble of byte
  446.  
  447. Name  : LoWord               (Low Word)
  448.  
  449. This function returns the low, or least significant, word of a
  450. long integer.
  451.  
  452. See also Ints2Long, which can be used to reverse the process.
  453.  
  454.    Word% = LoWord(Number&)
  455.  
  456. Number&     long integer from which to pick low word
  457. -------
  458. Word%       low word of long integer
  459.  
  460. Name  : LRotateI             (Left Rotate Integer)
  461.  
  462. This function returns the result of rotating an integer left by
  463. a specified number of bits.
  464.  
  465.    Result% = LRotateI(Number%, Count%)
  466.  
  467. Number%     number to rotate
  468. Count%      number of bits by which to rotate
  469. -------
  470. Result%     rotated number
  471.  
  472. Name  : LRotateL             (Left Rotate Long)
  473.  
  474. This function returns the result of rotating a long integer
  475. left by a specified number of bits.
  476.  
  477.    Result& = LRotateL(Number&, Count%)
  478.  
  479. Number&     number to rotate
  480. Count%      number of bits by which to rotate
  481. -------
  482. Result&     rotated number
  483.  
  484. Name  : LShiftI             (Left Shift Integer)
  485.  
  486. This function returns the result of shifting an integer left by
  487. a specified number of bits.
  488.  
  489.    Result% = LShiftI(Number%, Count%)
  490.  
  491. Number%     number to shift
  492. Count%      number of bits by which to shift
  493. -------
  494. Result%     shifted number
  495.  
  496. Name  : LShiftL             (Left Shift Long)
  497.  
  498. This function returns the result of shifting a long integer
  499. left by a specified number of bits.
  500.  
  501.    Result& = LShiftL(Number&, Count%)
  502.  
  503. Number&     number to shift
  504. Count%      number of bits by which to shift
  505. -------
  506. Result&     shifted number
  507.  
  508. Name  : MaxD                 (Maximum Double-precision)
  509.  
  510. This function returns the larger of two double-precision
  511. numbers.
  512.  
  513.    Result# = MaxD(Nr1#, Nr2#)
  514.  
  515. Nr1#      first number
  516. Nr2#      second number
  517. -------
  518. Result#   larger of the two numbers
  519.  
  520. Name  : MaxI                 (Maximum Integer)
  521.  
  522. This function returns the larger of two integers.
  523.  
  524.    Result% = MaxI(Nr1%, Nr2%)
  525.  
  526. Nr1%      first number
  527. Nr2%      second number
  528. -------
  529. Result%   larger of the two numbers
  530.  
  531. Name  : MaxL                 (Maximum Long)
  532.  
  533. This function returns the larger of two long integers.
  534.  
  535.    Result& = MaxL(Nr1&, Nr2&)
  536.  
  537. Nr1&      first number
  538. Nr2&      second number
  539. -------
  540. Result&   larger of the two numbers
  541.  
  542. Name  : MaxS                 (Maximum Single-precision)
  543.  
  544. This function returns the larger of two single-precision
  545. numbers.
  546.  
  547.    Result! = MaxS(Nr1!, Nr2!)
  548.  
  549. Nr1!      first number
  550. Nr2!      second number
  551. -------
  552. Result!   larger of the two numbers
  553.  
  554. Name  : MinD                 (Minimum Double-precision)
  555.  
  556. This function returns the smaller of two double-precision
  557. numbers.
  558.  
  559.    Result# = MinD(Nr1#, Nr2#)
  560.  
  561. Nr1#      first number
  562. Nr2#      second number
  563. -------
  564. Result#   smaller of the two numbers
  565.  
  566. Name  : MinI                 (Minimum Integer)
  567.  
  568. This function returns the smaller of two integers.
  569.  
  570.    Result% = MinI(Nr1%, Nr2%)
  571.  
  572. Nr1%      first number
  573. Nr2%      second number
  574. -------
  575. Result%   smaller of the two numbers
  576.  
  577. Name  : MinL                 (Minimum Long)
  578.  
  579. This function returns the smaller of two long integers.
  580.  
  581.    Result& = MinL(Nr1&, Nr2&)
  582.  
  583. Nr1&      first number
  584. Nr2&      second number
  585. -------
  586. Result&   smaller of the two numbers
  587.  
  588. Name  : MinS                 (Minimum Single-precision)
  589.  
  590. This function returns the smaller of two single-precision
  591. numbers.
  592.  
  593.    Result! = MinS(Nr1!, Nr2!)
  594.  
  595. Nr1!      first number
  596. Nr2!      second number
  597. -------
  598. Result!   smaller of the two numbers
  599.  
  600. Name  : MinuteUnsq           (Minute Unsqueeze)
  601.  
  602. This function returns the minute from a compressed time.  It
  603. works in conjunction with the TimeSq time compression function.
  604.  
  605.    MinuteNr% = MinuteUnsq(Number%)
  606.  
  607. Number%     compressed time
  608. -------
  609. MinuteNr%   minute number
  610.  
  611. Name  : MonthUnsq            (Month Unsqueeze)
  612.  
  613. This function returns the month from a compressed date.  It
  614. works in conjunction with the DateSq date compression function.
  615.  
  616.    MonthNr% = MonthUnsq(Number%)
  617.  
  618. Number%     compressed date
  619. -------
  620. MonthNr%    month number
  621.  
  622. Name  : Nybs2Byte            (Nybbles to Byte)
  623.  
  624. This function combines two nybbles into a single byte value.
  625. Since BASIC supports neither byte nor nybble data types, the
  626. values are all kept in integers.
  627.  
  628. See also HiNybble and LoNybble, which may be used to reverse
  629. the process, splitting a byte into two nybbles.
  630.  
  631.    Result% = Nybs2Byte(Lo%, Hi%)
  632.  
  633. Lo%       low, or least significant, nybble
  634. Hi%       high, or most significant, nybble
  635. -------
  636. Result%   result of combining nybbles into a byte
  637.  
  638. Name  : Odd                  (Odd)
  639.  
  640. This function tells you whether an integer is an odd number.
  641.  
  642.    Result% = Odd(Number%)
  643.  
  644. Number%   number to test
  645. -------
  646. Result%   whether number is odd (-1 yes, 0 no)
  647.  
  648. Name  : OddL                 (Odd Long)
  649.  
  650. This function tells you whether a long integer is an odd number.
  651.  
  652.    Result% = OddL(Number&)
  653.  
  654. Number&   number to test
  655. -------
  656. Result%   whether number is odd (-1 yes, 0 no)
  657.  
  658. Name  : PBCwinVer            (PBCwin Version)
  659.  
  660. This function returns the version of PBCwin available.  You can
  661. use this to make sure the PBCWIN.DLL being used is sufficiently
  662. current to handle the routines you need.  Don't check the exact
  663. version number, since it should be ok for the user to have a
  664. newer version of PBCwin than your program expects.  Instead,
  665. make sure that the returned version number is greater than or
  666. equal to the version you expect.
  667.  
  668. The version number is multiplied by 100 so it can be returned
  669. as an integer.  For example, PBCwin v1.0 returns a result of
  670. 100 here.  PBCwin v1.1 will return 110, and so on.
  671.  
  672.    Version% = PBCwinVer()
  673.  
  674. -------
  675. Version%    PBCWIN.DLL version times 100
  676.  
  677. Name  : PeekB                (Peek Byte)
  678.  
  679. This routine gets a byte from a specified memory location. The
  680. memory location is specified as a pointer, which is a combined
  681. segment and offset value.  The VarPtr function can be used to
  682. get a pointer to a variable.  If you want to create a pointer
  683. to an address for which you know the segment and offset, you
  684. can use the Ints2Long function to do so, by loading the segment
  685. into the high word and offset into the low word.
  686.  
  687.    Nr% = PeekB(Ptr&)
  688.  
  689. Ptr&        far pointer
  690. -------
  691. Nr%         byte retrieved from memory
  692.  
  693. Name  : PeekI                (Peek Integer)
  694.  
  695. This routine gets an integer from a specified memory location.
  696. The memory location is specified as a pointer, which is a
  697. combined segment and offset value.  The VarPtr function can be
  698. used to get a pointer to a variable.  If you want to create a
  699. pointer to an address for which you know the segment and
  700. offset, you can use the Ints2Long function to do so, by loading
  701. the segment into the high word and offset into the low word.
  702.  
  703.    Nr% = PeekI(Ptr&)
  704.  
  705. Ptr&        far pointer
  706. -------
  707. Nr%         integer retrieved from memory
  708.  
  709. Name  : PeekL                (Peek Long)
  710.  
  711. This routine gets a long integer from a specified memory
  712. location. The memory location is specified as a pointer, which
  713. is a combined segment and offset value.  The VarPtr function
  714. can be used to get a pointer to a variable.  If you want to
  715. create a pointer to an address for which you know the segment
  716. and offset, you can use the Ints2Long function to do so, by
  717. loading the segment into the high word and offset into the low
  718. word.
  719.  
  720.    Nr& = PeekL(Ptr&)
  721.  
  722. Ptr&        far pointer
  723. -------
  724. Nr&         long integer retrieved from memory
  725.  
  726. Name  : PokeB                (Poke Byte)
  727.  
  728. This routine pokes a byte into a specified memory location. The
  729. memory location is specified as a pointer, which is a combined
  730. segment and offset value.  The VarPtr function can be used to
  731. get a pointer to a variable.  If you want to create a pointer
  732. to an address for which you know the segment and offset, you
  733. can use the Ints2Long function to do so, by loading the segment
  734. into the high word and offset into the low word.
  735.  
  736.    PokeB Ptr&, Nr%
  737.  
  738. Ptr&        far pointer
  739. Nr%         byte to place in memory at the pointer location
  740. -------
  741.  
  742. Name  : PokeI                (Poke Integer)
  743.  
  744. This routine pokes an integer into a specified memory location.
  745. The memory location is specified as a pointer, which is a
  746. combined segment and offset value.  The VarPtr function can be
  747. used to get a pointer to a variable.  If you want to create a
  748. pointer to an address for which you know the segment and
  749. offset, you can use the Ints2Long function to do so, by loading
  750. the segment into the high word and offset into the low word.
  751.  
  752.    PokeI Ptr&, Nr%
  753.  
  754. Ptr&        far pointer
  755. Nr%         integer to place in memory at the pointer location
  756. -------
  757.  
  758. Name  : PokeL                (Poke Long)
  759.  
  760. This routine pokes a long integer into a specified memory
  761. location. The memory location is specified as a pointer, which
  762. is a combined segment and offset value.  The VarPtr function
  763. can be used to get a pointer to a variable.  If you want to
  764. create a pointer to an address for which you know the segment
  765. and offset, you can use the Ints2Long function to do so, by
  766. loading the segment into the high word and offset into the low
  767. word.
  768.  
  769.    PokeL Ptr&, Nr&
  770.  
  771. Ptr&        far pointer
  772. Nr%         long integer to place in memory at the pointer posn
  773. -------
  774.  
  775. Name  : Power2I              (Power of 2, Integer)
  776.  
  777. This function returns the result of raising 2 (two) to the
  778. specified power.  It's much faster than using the
  779. floating-point raise-to-power operator in BASIC, and is
  780. especially handy for bit twiddling.
  781.  
  782.    Result% = Power2I(Power%)
  783.  
  784. Power%      power to which to raise two
  785. -------
  786. Result%     two to the specified power
  787.  
  788. Name  : Power2L              (Power of 2, Long)
  789.  
  790. This function returns the result of raising 2 (two) to the
  791. specified power.  It's much faster than using the
  792. floating-point raise-to-power operator in BASIC, and is
  793. especially handy for bit twiddling.
  794.  
  795.    Result& = Power2L(Power%)
  796.  
  797. Power%      power to which to raise two
  798. -------
  799. Result&     two to the specified power
  800.  
  801. Name  : PrtPorts             (Printer Ports)
  802.  
  803. This function returns the number of printer (parallel) ports
  804. installed.
  805.  
  806.    Result% = PrtPorts()
  807.  
  808. -------
  809. Result%   printer ports (0-3)
  810.  
  811. Name  : PtrMatD              (Pointer Matrix Double-precision)
  812.  
  813. This routine initializes each element of a double-precision
  814. array to an increasingly large value.  The value starts at a
  815. specified beginning and is incremented by one for each
  816. subsequent element.
  817.  
  818.    PtrMatD VarPtr(Array#(FirstElem)), Elements%, InitValue#
  819.  
  820. Array#(FirstElem)    first element of array to initialize
  821. Elements%            number of elements to initialize
  822. InitValue#           value to which to init first array element
  823. -------
  824. Array#(FirstElem thru FirstElem + Elements% - 1)    initialized
  825.  
  826. Name  : PtrMatI              (Pointer Matrix Integer)
  827.  
  828. This routine initializes each element of an integer array to an
  829. increasingly large value.  The value starts at a specified
  830. beginning and is incremented by one for each subsequent element.
  831.  
  832.    PtrMatI VarPtr(Array%(FirstElem)), Elements%, InitValue%
  833.  
  834. Array%(FirstElem)    first element of array to initialize
  835. Elements%            number of elements to initialize
  836. InitValue%           value to which to init first array element
  837. -------
  838. Array%(FirstElem thru FirstElem + Elements% - 1)    initialized
  839.  
  840. Name  : PtrMatL              (Pointer Matrix Long)
  841.  
  842. This routine initializes each element of a long integer array
  843. to an increasingly large value.  The value starts at a
  844. specified beginning and is incremented by one for each
  845. subsequent element.
  846.  
  847.    PtrMatL VarPtr(Array&(FirstElem)), Elements%, InitValue&
  848.  
  849. Array&(FirstElem)    first element of array to initialize
  850. Elements%            number of elements to initialize
  851. InitValue&           value to which to init first array element
  852. -------
  853. Array&(FirstElem thru FirstElem + Elements% - 1)    initialized
  854.  
  855. Name  : PtrMatS              (Pointer Matrix Single-precision)
  856.  
  857. This routine initializes each element of a single-precision
  858. array to an increasingly large value.  The value starts at a
  859. specified beginning and is incremented by one for each
  860. subsequent element.
  861.  
  862.    PtrMatS VarPtr(Array!(FirstElem)), Elements%, InitValue!
  863.  
  864. Array!(FirstElem)    first element of array to initialize
  865. Elements%            number of elements to initialize
  866. InitValue!           value to which to init first array element
  867. -------
  868. Array!(FirstElem thru FirstElem + Elements% - 1)    initialized
  869.  
  870. Name  : RRotateI             (Right Rotate Integer)
  871.  
  872. This function returns the result of rotating an integer right
  873. by a specified number of bits.
  874.  
  875.    Result% = RRotateI(Number%, Count%)
  876.  
  877. Number%     number to rotate
  878. Count%      number of bits by which to rotate
  879. -------
  880. Result%     rotated number
  881.  
  882. Name  : RRotateL             (Right Rotate Long)
  883.  
  884. This function returns the result of rotating a long integer
  885. right by a specified number of bits.
  886.  
  887.    Result& = RRotateL(Number&, Count%)
  888.  
  889. Number&     number to rotate
  890. Count%      number of bits by which to rotate
  891. -------
  892. Result&     rotated number
  893.  
  894. Name  : RShiftI             (Right Shift Integer)
  895.  
  896. This function returns the result of shifting an integer right
  897. by a specified number of bits.
  898.  
  899.    Result% = RShiftI(Number%, Count%)
  900.  
  901. Number%     number to shift
  902. Count%      number of bits by which to shift
  903. -------
  904. Result%     shifted number
  905.  
  906. Name  : RShiftL             (Right Shift Long)
  907.  
  908. This function returns the result of shifting a long integer
  909. right by a specified number of bits.
  910.  
  911.    Result& = RShiftL(Number&, Count%)
  912.  
  913. Number&     number to shift
  914. Count%      number of bits by which to shift
  915. -------
  916. Result&     shifted number
  917.  
  918. Name  : SecondUnsq           (Second Unsqueeze)
  919.  
  920. This function returns the second from a compressed time.  It
  921. works in conjunction with the TimeSq time compression function.
  922.  
  923. Note that the second value will always be even, due to the
  924. limited amount of information that can be squeezed into an
  925. integer.
  926.  
  927.    SecondNr% = SecondUnsq(Number%)
  928.  
  929. Number%     compressed time
  930. -------
  931. SecondNr%   second number
  932.  
  933. Name  : SetMatC              (Set Matrix Currency)
  934.  
  935. This routine initializes each element of a currency array to a
  936. specified value.
  937.  
  938.    SetMatC VarPtr(Array@(FirstElem)), Elements%, Value@
  939.  
  940. Array@(FirstElem)    first element of array to initialize
  941. Elements%            number of elements to initialize
  942. Value@               value to which to initialize array
  943. -------
  944. Array@(FirstElem thru FirstElem + Elements% - 1)    initialized
  945.  
  946. Name  : SetMatD              (Set Matrix Double-precision)
  947.  
  948. This routine initializes each element of a double-precision
  949. array to a specified value.
  950.  
  951.    SetMatD VarPtr(Array#(FirstElem)), Elements%, Value#
  952.  
  953. Array#(FirstElem)    first element of array to initialize
  954. Elements%            number of elements to initialize
  955. Value#               value to which to initialize array
  956. -------
  957. Array#(FirstElem thru FirstElem + Elements% - 1)    initialized
  958.  
  959. Name  : SetMatI              (Set Matrix Integer)
  960.  
  961. This routine initializes each element of an integer array to a
  962. specified value.
  963.  
  964.    SetMatI VarPtr(Array%(FirstElem)), Elements%, Value%
  965.  
  966. Array%(FirstElem)    first element of array to initialize
  967. Elements%            number of elements to initialize
  968. Value%               value to which to initialize array
  969. -------
  970. Array%(FirstElem thru FirstElem + Elements% - 1)    initialized
  971.  
  972. Name  : SetMatL              (Set Matrix Long)
  973.  
  974. This routine initializes each element of a long integer array
  975. to a specified value.
  976.  
  977.    SetMatL VarPtr(Array&(FirstElem)), Elements%, Value&
  978.  
  979. Array&(FirstElem)    first element of array to initialize
  980. Elements%            number of elements to initialize
  981. Value&               value to which to initialize array
  982. -------
  983. Array&(FirstElem thru FirstElem + Elements% - 1)    initialized
  984.  
  985. Name  : SetMatS              (Set Matrix Single-precision)
  986.  
  987. This routine initializes each element of a single-precision
  988. array to a specified value.
  989.  
  990.    SetMatS VarPtr(Array!(FirstElem)), Elements%, Value!
  991.  
  992. Array!(FirstElem)    first element of array to initialize
  993. Elements%            number of elements to initialize
  994. Value!               value to which to initialize array
  995. -------
  996. Array!(FirstElem thru FirstElem + Elements% - 1)    initialized
  997.  
  998. Name  : SwapC                (Swap Currency)
  999.  
  1000. This routine swaps two currency values.
  1001.  
  1002.    SwapC Number1@, Number2@
  1003.  
  1004. Number1@   first number
  1005. Number2@   second number
  1006. -------
  1007. Number1@   former second number
  1008. Number2@   former first number
  1009.  
  1010. Name  : SwapD                (Swap Double-precision)
  1011.  
  1012. This routine swaps two double-precision numbers.
  1013.  
  1014.    SwapD Number1#, Number2#
  1015.  
  1016. Number1#   first number
  1017. Number2#   second number
  1018. -------
  1019. Number1#   former second number
  1020. Number2#   former first number
  1021.  
  1022. Name  : SwapI                (Swap Integer)
  1023.  
  1024. This routine swaps two integers.
  1025.  
  1026.    SwapI Number1%, Number2%
  1027.  
  1028. Number1%   first number
  1029. Number2%   second number
  1030. -------
  1031. Number1%   former second number
  1032. Number2%   former first number
  1033.  
  1034. Name  : SwapL                (Swap Long)
  1035.  
  1036. This routine swaps two long integers.
  1037.  
  1038.    SwapL Number1&, Number2&
  1039.  
  1040. Number1&   first number
  1041. Number2&   second number
  1042. -------
  1043. Number1&   former second number
  1044. Number2&   former first number
  1045.  
  1046. Name  : SwapS                (Swap Single-precision)
  1047.  
  1048. This routine swaps two single-precision numbers.
  1049.  
  1050.    SwapS Number1!, Number2!
  1051.  
  1052. Number1!   first number
  1053. Number2!   second number
  1054. -------
  1055. Number1!   former second number
  1056. Number2!   former first number
  1057.  
  1058. Name  : TimeSq               (Time Squeeze)
  1059.  
  1060. This function compresses a time into a single integer.  This
  1061. provides a very efficient storage format.  Note, however, that
  1062. an integer is not quite large enough to store an exact time--
  1063. the seconds value, if odd, will be rounded down to the next
  1064. closest even number.
  1065.  
  1066. Uncompression is done with HourUnsq, MinuteUnsq, and
  1067. SecondUnsq. See also DateSq, which allows you to compress a
  1068. date value similarly.
  1069.  
  1070. Note that compressed times are not in a format that may be
  1071. readily used for comparison or time math purposes.  If you need
  1072. such capabilities, convert the time to a BASIC time/date serial
  1073. number first-- see your BASIC manual for details.
  1074.  
  1075.    Result% = TimeSq(HourNr%, MinuteNr%, SecondNr%)
  1076.  
  1077. HourNr%     hour number (0-23)
  1078. MinuteNr%   minute number (0-59)
  1079. SecondNr%   second number (0-59; see note on truncation)
  1080. -------
  1081. Result%     compressed time
  1082.  
  1083. Name  : VarPtr               (Variable Pointer)
  1084.  
  1085. This function returns a far pointer to a variable.  It works
  1086. with any variable type except BASIC strings, which are stored
  1087. in an unusual format.  This function is required for passing
  1088. arrays to the PBCwin routines which take arrays as parameters.
  1089. It has not been tested with VB/Win 2.0 arrays, and is likely
  1090. not to work with such arrays if they're over 64k bytes.  Since
  1091. BASIC arrays may move in memory, it is advised that you get the
  1092. pointer to an array just before using it, to minimize the risk
  1093. of accessing the wrong area of memory.
  1094.  
  1095. This function can also be used to provide a pointer for use
  1096. with the various Peek_ and Poke_ routines in PBCwin.
  1097.  
  1098. Note that the PBCwin function, VarPtr, is not identical to the
  1099. DOS BASIC function, VARPTR.  It returns an absolute address
  1100. consisting of both segment and offset, rather than merely an
  1101. offset value.
  1102.  
  1103.    Ptr& = VarPtr(Vbl)
  1104.  
  1105. Vbl        variable for which to get a pointer
  1106. -------
  1107. Ptr&       far pointer to variable
  1108.  
  1109. Name  : YearUnsq             (Year Unsqueeze)
  1110.  
  1111. This function returns the year from a compressed date.  It
  1112. works in conjunction with the DateSq date compression function.
  1113.  
  1114.    YearNr% = YearUnsq(Number%)
  1115.  
  1116. Number%     compressed date
  1117. -------
  1118. YearNr%     year number
  1119.  
  1120.